﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Security;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace JingPan.CarRentalService.Contracts
{
    //// 注意: 使用“重构”菜单上的“重命名”命令，可以同时更改代码和配置文件中的接口名“IService1”。
    //[ServiceContract]
    //public interface ICarRentalService
    //{
    //    [OperationContract]
    //    string GetData(int value);

    //    [OperationContract]
    //    CompositeType GetDataUsingDataContract(CompositeType composite);

    //    // TODO: 在此添加您的服务操作
    //}

    //// 使用下面示例中说明的数据约定将复合类型添加到服务操作。
    //// 可以将 XSD 文件添加到项目中。在生成项目后，可以通过命名空间“WcfServiceLibrary1.ContractType”直接使用其中定义的数据类型。
    //[DataContract]
    //public class CompositeType
    //{
    //    bool boolValue = true;
    //    string stringValue = "Hello ";

    //    [DataMember]
    //    public bool BoolValue
    //    {
    //        get { return boolValue; }
    //        set { boolValue = value; }
    //    }

    //    [DataMember]
    //    public string StringValue
    //    {
    //        get { return stringValue; }
    //        set { stringValue = value; }
    //    }
    //}


    [ServiceContract(
                        Namespace ="http://jingpan/CarRentalService/2021/09/26",
                        Name="RentalService")]
    public interface ICarRentalService
    {
        //vehiclePreference 车辆偏好
        //pickupLocation接人的地方
        [OperationContract(Name = "GetPrice")]
        double CalculatePrice(DateTime pickupDate, DateTime returnDate,
            string pickupLocation, string vehiclePreference);

        [OperationContract(Name = "GetPriceOverloaded")]
        double CalculatePrice(string pickupLocation, string vehiclePreference);

        [OperationContract(IsOneWay = true, ProtectionLevel = ProtectionLevel.None)]
        void UpdatePrice(string vehicheId, double newPrice);

        /*
        在操作中使用复杂的数据类型，但是没有指示DataContractSerializer类如何对它们进行序列化
        那么所有公开可见的成员都可以自动序列化
         */
        [OperationContract]
        PriceCalculationResponse CalculatePrice(PriceCalculationRequest request);
    }
}
